#include <stdio.h>
#include <stdlib.h>

// 申请静态内存
void staticlloc()
{
	int arr[5];
	int i = 0;
	for(;i<5;i++)
	{
		arr[i] = i;
		printf("---> %d, %p \n",*(arr+i),arr+i);
	}
}

// 动态内存申请，注意需要手动释放内存
void dynamiclloc()
{
	int* arr = (int*)malloc(10*1024*1024*sizeof(int));	// 申请40M空间，对于动态申请的内存，需要手动释放
		
	// 手动释放内存，很重要的一点。
	free(arr);
}

int main()
{

	// 静态内纯，动态内存

	/*
	 * Stack overflow
	 * arr1定义10M大小数组，占用40M内存，int占用4字节，数组的定义属于静态内存，属于栈，栈的大小不是很大，超出会溢出
	 * arr2定义真用8M内存
	 * */
	//int arr1[10*1024*1024];	
	//int arr2[((int)0.2*1024*1024)];
	
	/*
	while(1){	
		staticlloc();
	}
	*/

	// 动态申请内存，并进行释放
	dynamiclloc();

	// C语言中有分区，四区模型，栈，堆
	// 栈：占用内存比较小，属于静态内存，arr1，arr2，函数结束以后会被系统自动回收
	// 堆：占用内存比较大，属于动态内存，不会自动回收，需要手动回收
	
	exit(0);
}

